home *** CD-ROM | disk | FTP | other *** search
/ Atari Forever 4 / Atari Forever 4.zip / Atari Forever 4.iso / PD_THEMA / EPSON / LQSET / LQSETPR.PAS < prev    next >
Pascal/Delphi Source File  |  1998-03-14  |  16KB  |  460 lines

  1. (*************************************************************************)
  2. (*                                                                       *)
  3. (*  Epson LQ Printer Configurer - Version 1.0                            *)
  4. (*                                                                       *)
  5. (*  Author: Forrest A. Blood IV - 11/23/91                               *)
  6. (*  Based on the original program for a Gemini 10x by G. Moore - 12/4/87 *)
  7. (*                                                                       *)  
  8. (*  This program allows you to configure an Epson LQ in various ways     *)
  9. (*  including "Ultra Tiny" print.  This program has been tested on an    *)
  10. (*  LQ-510 and an LQ-570 printer and may not work on other models. The   *)
  11. (*  source code is well documented so you can modify the printer codes   *)
  12. (*  for your specific printer.  You need Personal Pascal Version 2 to    *)
  13. (*  compile this.                                                        *)
  14. (*                                                                       *)
  15. (*  This source code and compiled program are released into the public   *)
  16. (*  domain and may not be sold for profit.                               *)
  17. (*                                                                       *)
  18. (*************************************************************************)
  19.  
  20. {$S10,D-}
  21.  
  22. Program Epson_Acc;
  23.  
  24. {$I GEMSUBS} 
  25. {$I AUXSUBS}
  26.  
  27. LABEL 1991;
  28.  
  29. CONST 
  30.   
  31.  {The following are all CONST defins from the Resource Construction Program}
  32.    PRT_BOX = 0;
  33.    ULTRATNY = 4;
  34.    PICA = 3;
  35.    ELITE = 5;
  36.    CONDENSE = 6;
  37.    PAPER = 17;
  38.    SKIPOVER = 18;
  39.    D_WIDE = 19;
  40.    D_STRIKE = 21;
  41.    ITALICS = 20;
  42.    BOLD = 22;
  43.    FORMFEED = 16;
  44.    TYPERITE = 14;
  45.    LINEFEED = 12;
  46.    DONE = 13;
  47.    INITIAL = 15;
  48.    LEFT = 25;
  49.    RIGHT = 26;
  50.    DOWN = 28;
  51.    LPP = 27;
  52.    UP = 29;
  53.    LFSIZE = 30;
  54.  
  55. VAR
  56.  
  57.   {The following capitalized variables represent whether or
  58.    not the indicated button is selected}
  59.  
  60.    PICA_,
  61.    ELITE_,
  62.    CONDENSE_,
  63.    ULTRA_TINY_,
  64.    PAPER_,
  65.    SKIPOVER_,
  66.    D_WIDE_,
  67.    D_STRIKE_,
  68.    ITALICS_,
  69.    BOLD_ : Boolean;
  70.  
  71.    J,
  72.    Choice,
  73.    ToBeEdited,       {Which of the four buttons is to be edited}
  74.    CurLeft,          {Current Left Margin}
  75.    CurRight,         {Current Right Margin}
  76.    CurLPP,           {Current Number of Lines Per Page}
  77.    CurLFS : Integer; {Current Line Feed Size}
  78.  
  79.    Box : Dialog_Ptr;
  80.  
  81.    OutStr : Str255;  {String to send to the printer}
  82.  
  83.    P : File of Text;
  84.  
  85.    TheScreen : Screen_type;
  86.  
  87.    Initial_Draw,          {Has dialog been drawn yet?}
  88.    ChangeSize : Boolean;  {Has size changed (eg from PICA to CONDENSED)}  
  89.  
  90. (****************************************************************)
  91. Function bcostat(device : integer) : boolean;   
  92.    BIOS(8);
  93. (****************************************************************)
  94. Procedure TypeWriter;
  95.  
  96. Begin
  97.   Clear_Screen;
  98.   Curs_Home;
  99.   Curs_On;
  100.   Writeln('Typewriter mode -- type /EX to quit');  
  101.   Writeln;
  102.   Repeat
  103.     Readln(OutStr);
  104.     If (OutStr <> '/EX') and (OutStr <> '/ex') then Writeln(P,OutStr);
  105.   Until (OutStr = '/EX') or (OutStr = '/ex');
  106.   Curs_Off;
  107.   Clear_Screen;
  108. End;
  109. (****************************************************************)
  110. Procedure UpdateNumber(Index,Value:Integer);
  111.  
  112. VAR S : Str255;
  113.     NewValue,
  114.     J, K : Integer;
  115.  
  116. {Gets current resolution:  0 = Low, 1 = Medium, 2 = High}
  117. Function Get_rez:integer;
  118.    XBIOS(4);
  119.  
  120. Begin
  121.     {Convert the integer to a string}
  122.     K := Value div 100;
  123.     If K = 0 then S := ' ' else S := Chr(Ord('0') + K);
  124.     If (Value < 10) then S := '  ' else   
  125.     begin
  126.       Value := Value mod 100;
  127.       K := Value div 10;
  128.       S := concat(S,Chr(Ord('0') + K));
  129.       Value := Value Mod 10;
  130.     end;
  131.     S := concat(S,Chr(Ord('0') + Value));
  132.  
  133.     {Draw string directly to dialog box since Show_Dialog is WAY too slow}    
  134.     Case Index of
  135.       LEFT   : J := 99;
  136.       RIGHT  : J := 115;
  137.       LPP    : J := 131;
  138.       LFSIZE : J := 147;
  139.     end;
  140.  
  141.     If Get_rez = 0 then K := 288 else K := 448;
  142.     If Get_rez = 2 then J := J * 2;
  143.     Draw_Mode(1);
  144.     Draw_String(K,J,S);
  145.  
  146. End;
  147. (****************************************************************)
  148.  
  149. Begin
  150.   If Init_Gem >= 0 then
  151.   Begin
  152.     If not Load_Resource('EPSONLQ.RSC') then
  153.     J := Do_Alert('[3][ EPSONLQ.RSC not | found! ][ ABORT ]',1)
  154.   else
  155.     Begin
  156.         Find_Dialog(PRT_BOX,Box);
  157.         Center_Dialog(Box);
  158.         Init_Mouse;
  159.       
  160.         PICA_ := True;
  161.         ELITE_ := False;
  162.         CONDENSE_ := False;
  163.         ULTRA_TINY_ := False;
  164.         PAPER_ := False;
  165.         SKIPOVER_ := False;
  166.         D_WIDE_ := False;
  167.         D_STRIKE_ := False;
  168.         ITALICS_ := False;
  169.         BOLD_ := False;
  170.  
  171.         ToBeEdited := RIGHT;
  172.  
  173.         CurLeft := 0;
  174.         CurRight := 80;
  175.         CurLPP := 66;
  176.         CurLFS := 30;
  177.  
  178.         Initial_Draw := False;
  179.         ChangeSize := False;
  180.  
  181.         Rewrite(P,'PRN:');
  182.  
  183.         Obj_SetState(Box,LEFT,Selected | Shadowed,Initial_Draw);  
  184.  
  185.         Repeat
  186.           If PICA_ 
  187.             then Obj_SetState(Box,PICA,(Selected | Shadowed),Initial_Draw)
  188.             else Obj_SetState(Box,PICA,(Shadowed),Initial_Draw);
  189.           
  190.           If ELITE_ 
  191.             then Obj_SetState(Box,ELITE,(Selected | Shadowed),Initial_Draw)
  192.             else Obj_SetState(Box,ELITE,(Shadowed),Initial_Draw);
  193.           
  194.           If CONDENSE_ 
  195.             then Obj_SetState(Box,CONDENSE,(Selected | Shadowed),Initial_Draw)
  196.             else Obj_SetState(Box,CONDENSE,(Shadowed),Initial_Draw);
  197.           
  198.           If ULTRA_TINY_ 
  199.             then Obj_SetState(Box,ULTRATNY,(Selected | Shadowed),Initial_Draw)
  200.             else Obj_SetState(Box,ULTRATNY,(Shadowed),Initial_Draw);
  201.           
  202.           If PAPER_ 
  203.             then Obj_SetState(Box,PAPER,(Selected | Shadowed),Initial_Draw)
  204.             else Obj_SetState(Box,PAPER,(Shadowed),Initial_Draw);
  205.           
  206.           If SKIPOVER_ 
  207.             then Obj_SetState(Box,SKIPOVER,(Selected | Shadowed),Initial_Draw)
  208.             else Obj_SetState(Box,SKIPOVER,(Shadowed),Initial_Draw);
  209.           
  210.           If D_WIDE_ 
  211.             then Obj_SetState(Box,D_WIDE,(Selected | Shadowed),Initial_Draw)
  212.             else Obj_SetState(Box,D_WIDE,(Shadowed),Initial_Draw);
  213.           
  214.           If D_STRIKE_ 
  215.             then Obj_SetState(Box,D_STRIKE,(Selected | Shadowed),Initial_Draw)
  216.             else Obj_SetState(Box,D_STRIKE,(Shadowed),Initial_Draw);
  217.           
  218.           If ITALICS_ 
  219.             then Obj_SetState(Box,ITALICS,(Selected | Shadowed),Initial_Draw)
  220.             else Obj_SetState(Box,ITALICS,(Shadowed),Initial_Draw);
  221.           
  222.           If BOLD_ 
  223.             then Obj_SetState(Box,BOLD,(Selected | Shadowed),Initial_Draw)
  224.             else Obj_SetState(Box,BOLD,(Shadowed),Initial_Draw);
  225.  
  226.           Obj_SetState(Box,LINEFEED,Shadowed,Initial_Draw);  
  227.           Obj_SetState(Box,FORMFEED,Shadowed,Initial_Draw);  
  228.           Obj_SetState(Box,TYPERITE,Shadowed,Initial_Draw);  
  229.           Obj_SetState(Box,INITIAL,Shadowed,Initial_Draw);  
  230.           Obj_SetState(Box,UP,Normal,Initial_Draw);  
  231.           Obj_SetState(Box,DOWN,Normal,Initial_Draw); 
  232.  
  233.           If (not Initial_Draw) then Choice := Do_Dialog(Box,0)
  234.                                 else Choice := Redo_Dialog(Box,0);
  235.       
  236.           OutStr := '';
  237.  
  238.           Initial_Draw := True;
  239.  
  240.           If (Obj_State(Box,PAPER) & Selected) = 0
  241.             then begin
  242.                    PAPER_ := False;
  243.                    OutStr := Concat(OutStr,#27,#120,#0); {DISABLE LQ Mode}
  244.                  end
  245.             else begin
  246.                    PAPER_ := True;
  247.                    OutStr := Concat(OutStr,#27,#120,#1); {ENABLE LQ Mode}
  248.                  end;           
  249.  
  250.           If (Obj_State(Box,SKIPOVER) & Selected) = 0
  251.           then begin
  252.                    SKIPOVER_ := False;
  253.                    OutStr := Concat(OutStr,#27,#79); {DISABLE PERFORATION SKIPOVER}
  254.                end
  255.             else begin
  256.                    SKIPOVER_ := True;
  257.                    OutStr := Concat(OutStr,#27,#78,#6); {ENABLE PERFORATION SKIPOVER (SKIPS 2 LINES)}
  258.                  end;           
  259.  
  260.           If (Obj_State(Box,D_WIDE) & Selected) = 0
  261.             then begin
  262.                    D_WIDE_ := False;
  263.                    OutStr := Concat(OutStr,#27,'W',#0); {DISABLE DOUBLEWIDE PRINT}
  264.                  end  
  265.             else begin
  266.                    D_WIDE_ := True;
  267.                    OutStr := Concat(OutStr,#27,'W',#1); {ENABLE DOUBLEWIDE PRINT}
  268.                  end;           
  269.  
  270.           If (Obj_State(Box,D_STRIKE) & Selected) = 0
  271.             then begin
  272.                    D_STRIKE_ := False;
  273.                    OutStr := Concat(OutStr,#27,'H'); {DISABLE DOUBLESTRIKE}
  274.                  end  
  275.             else begin
  276.                    D_STRIKE_ := True;
  277.                    OutStr := Concat(OutStr,#27,#71); {ENABLE DOUBLESTRIKE}
  278.                  end;           
  279.  
  280.           If (Obj_State(Box,ITALICS) & Selected) = 0
  281.             then begin
  282.                    ITALICS_ := False;
  283.                    OutStr := Concat(OutStr,#27,#53); {DISABLE ITALICS}
  284.                  end  
  285.             else begin
  286.                    ITALICS_ := True;
  287.                    OutStr := Concat(OutStr,#27,#52); {ENABLE ITALICS}
  288.                  end;           
  289.  
  290.           If (Obj_State(Box,BOLD) & Selected) = 0
  291.             then begin
  292.                    BOLD_ := False;
  293.                    OutStr := Concat(OutStr,#27,#70); {DISABLE EMPHASIZED (BOLD) PRINT}
  294.                  end  
  295.             else begin
  296.                    BOLD_ := True;
  297.                    OutStr := Concat(OutStr,#27,#69); {ENABLE EMPHASIZED PRINT}
  298.                  end;           
  299.  
  300.           If (Obj_State(Box,PICA) & Selected) = 0
  301.             then PICA_ := False
  302.             else begin
  303.                    If not PICA_ then ChangeSize := True;
  304.                    PICA_ := True;
  305.                    OutStr := Concat(OutStr,#27,#80); {SELECT PICA (10 CPI)}
  306.                  end;           
  307.  
  308.           If (Obj_State(Box,ELITE) & Selected) = 0
  309.             then ELITE_ := False
  310.             else begin
  311.                    If not ELITE_ then ChangeSize := True;
  312.                    ELITE_ := True;
  313.                    OutStr := Concat(OutStr,#27,#77); {SELECT ELITE (12 CPI)}
  314.                  end;           
  315.  
  316.           If (Obj_State(Box,CONDENSE) & Selected) = 0
  317.             then CONDENSE_ := False
  318.             else begin
  319.                    If not CONDENSE_ then ChangeSize := True;
  320.                    CONDENSE_ := True;
  321.                    OutStr := Concat(OutStr,#27,#103); {SELECT CONDENSED PRINT (17 CPI)}
  322.                  end;           
  323.  
  324.           If (Obj_State(Box,ULTRATNY) & Selected) = 0
  325.             then begin
  326.                    ULTRA_TINY_ := False;
  327.                    OutStr := Concat(OutStr,#27,#84); {CANCEL SUBSCRIPT MODE}
  328.                    If not D_STRIKE_ then OutStr := Concat(OutStr,#27,'H'); {CANCEL DOUBLE STRIKE}
  329.                  end  
  330.             else begin
  331.                    If not ULTRA_TINY_ then ChangeSize := True;
  332.                    ULTRA_TINY_ := True;
  333.                    OutStr := Concat(OutStr,#27,#83,#0,#15); {SELECT SUPERSCRIPT MODE & CONDENSED}
  334.                    D_STRIKE_ := True;
  335.                  end;           
  336.                   
  337.           If ChangeSize then
  338.           begin
  339.             CurLeft := 0;
  340.             UpdateNumber(LEFT,CurLeft);
  341.           end;  
  342.           
  343.           If ULTRA_TINY_ and ChangeSize then
  344.           begin
  345.             CurLFS := 17;
  346.             UpdateNumber(LFSIZE,CurLFS);    
  347.             CurLPP := 122;
  348.             UpdateNumber(LPP,CurLPP);
  349.             CurRight := 136;
  350.             UpdateNumber(RIGHT,CurRight);
  351.           end;    
  352.     
  353.           If (not ULTRA_TINY_) and ChangeSize then
  354.           begin
  355.             CurLFS := 30;
  356.             UpdateNumber(LFSIZE,CurLFS);    
  357.             CurLPP := 66;
  358.             UpdateNumber(LPP,CurLPP);
  359.             If PICA_ then CurRight := 80;
  360.             If ELITE_ then CurRight := 96;
  361.             If CONDENSE_ then CurRight := 120;
  362.             UpdateNumber(RIGHT,CurRight);
  363.           end;
  364.  
  365.           ChangeSize := False;
  366.  
  367.           If (Obj_State(Box,LEFT) & Selected) <> 0 then ToBeEdited := LEFT;        
  368.           If (Obj_State(Box,RIGHT) & Selected) <> 0 then ToBeEdited := RIGHT;        
  369.           If (Obj_State(Box,LPP) & Selected) <> 0 then ToBeEdited := LPP;        
  370.           If (Obj_State(Box,LFSIZE) & Selected) <> 0 then ToBeEdited := LFSIZE;        
  371.  
  372.           J := 0;
  373.           If (Obj_State(Box,UP) & Selected) <> 0 then J := 1;        
  374.           If (Obj_State(Box,DOWN) & Selected) <> 0 then J := -1;        
  375.               
  376.           Case ToBeEdited of
  377.             LEFT : If (CurLeft + J > -1) and (CurLeft + J < 136) then
  378.                    Begin
  379.                      CurLeft := CurLeft + J;
  380.                      UpdateNumber(LEFT,CurLeft);
  381.                    End;
  382.             RIGHT : If (CurRight + J > 0) and (CurRight + J < 137) then
  383.                     Begin
  384.                       CurRight := CurRight + J;
  385.                       UpdateNumber(RIGHT,CurRight);
  386.                     End;
  387.             LPP : If (CurLPP + J > 0) and (CurLPP + J < 128) then
  388.                   Begin
  389.                     CurLPP := CurLPP + J;
  390.                     UpdateNumber(LPP,CurLPP);
  391.                   End;
  392.             LFSIZE : If (CurLFS + J > 0) and (CurLFS + J < 256) then
  393.                      Begin
  394.                        CurLFS := CurLFS + J;
  395.                        UpdateNumber(LFSIZE,CurLFS);
  396.                      End;
  397.           end; {CASE}
  398.  
  399.           OutStr := Concat(OutStr,#27,#108,Chr(CurLeft));  {SET LEFT MARGIN}
  400.           OutStr := Concat(OutStr,#27,#81,Chr(CurRight)); {SET RIGHT MARGIN}
  401.           OutStr := Concat(OutStr,#27,#67,Chr(CurLPP));   {SET LINES PER PAGE} 
  402.           OutStr := Concat(OutStr,#27,#51,Chr(CurLFS));   {SET LINE FEED SIZE in 1/180" INCREMENTS}
  403.  
  404.           If (Obj_State(Box,LINEFEED) & Selected) <> 0
  405.             then OutStr := Concat(OutStr,#10); {SEND LINEFEED}
  406.  
  407.           If (Obj_State(Box,FORMFEED) & Selected) <> 0
  408.             then OutStr := Concat(OutStr,#12);  {SEND FORMFEED}
  409.   
  410.           If Choice = INITIAL then    
  411.           Begin
  412.             PICA_ := True;
  413.             ELITE_ := False;
  414.             CONDENSE_ := False;
  415.             ULTRA_TINY_ := False;
  416.             PAPER_ := False;
  417.             SKIPOVER_ := False;
  418.             D_WIDE_ := False;
  419.             D_STRIKE_ := False;
  420.             ITALICS_ := False;
  421.             BOLD_ := False;
  422.  
  423.             CurLFS := 30;
  424.             UpdateNumber(LFSIZE,CurLFS);    
  425.             CurLPP := 66;
  426.             UpdateNumber(LPP,CurLPP);
  427.             CurRight := 80;
  428.             UpdateNumber(RIGHT,CurRight);
  429.             CurLeft := 0;
  430.             UpdateNumber(LEFT,CurLeft);
  431.  
  432.             OutStr := Concat(#27,#64);  {CODE TO INITIALIZE PRINTER TO POWER UP STATE}         
  433.           End;
  434.  
  435.           While not bcostat(0) do
  436.           Begin
  437.             J := do_alert('[3][ Printer is not | responding! ][ Abort ]',1);
  438.             If J = 1 then goto 1991;
  439.           End;
  440.  
  441.           Write(P,OutStr); {Send OutStr to the printer!}
  442.                     
  443.           If Choice = TYPERITE then
  444.            Begin
  445.             Hide_Mouse;
  446.             Save_Scrn(TheScreen);
  447.             TypeWriter;
  448.             Restr_Scrn(TheScreen);
  449.             Show_Mouse;
  450.           End;
  451.         Until Choice = Done;
  452.  
  453.     END;
  454.  
  455. 1991:
  456.     Exit_Gem;
  457.     END; 
  458. END.
  459.  
  460.